#include <iostream>

//case 语句
template<int N>
struct Case{};

template<>
struct Case<1>
{
    static std::string value()
    {
        return "1";
    }
};

template<>
struct Case<2>
{
    static std::string value()
    {
        return "2";
    }
};

//循环
template<int start,int end>
struct For
{
    static void value()
    {
        std::cout<<start<<std::endl;
        For<start + 1,end>::value();
    }
};

template<int end>
struct For<end,end>
{
    static void value()
    {
        
    }
};

//枚举可以在编译期做加法
template<int N>
struct Data
{
    enum
    {
        result = Data<N-1>::result + Data<N-2>::result
    };
};


template<>
struct Data<1>
{
    enum
    {
        result = 1
    };
};

template<>
struct Data<2>
{
    enum
    {
        result = 2
    };
};

int main()
{
    Data<5>::result;
    return 0;
}